Ejemplos Interface Segregation
public class Book { public string Title { get; set; } public string Author { get; set; } public string ISBN { get; set; } } public interface IUser { void BorrowBook(string bookId); void ReturnBook(string bookId); void SearchCatalog(string searchTerm); void AddBook(Book book); void RemoveBook(string bookId); } public class Guest : IUser { public void BorrowBook(string bookId) { throw new NotImplementedException("Guests cannot borrow books."); } public void ReturnBook(string bookId) { throw new NotImplementedException("Guests cannot return books."); } public void SearchCatalog(string searchTerm) { // Implementation to search books. } public void AddBook(Book book) { throw new NotImplementedException("Guests cannot add books."); } public void RemoveBook(string bookId) { throw new NotImplementedException("Guests cannot remove books."); } }
public class Book { public String BookId; public String Title; public String Author; public String ISBN; public String toString() { return String.format("[BookId: %s, Title: %s, Author:%s, ISBN:%s]", BookId, Title, Author, ISBN); } } public interface IBorrowReturn { void BorrowBook(String bookId); void ReturnBook(String bookId); } public interface ISearchable { void SearchCatalog(String searchTerm); } public interface IManageInventory { void AddBook(Book book); void RemoveBook(String bookId); } public class Member implements IBorrowReturn, ISearchable { public void BorrowBook(String bookId) { // Implementation to borrow a book. System.out.printf("Member Borrow Book, BookId: %s\n", bookId); } public void ReturnBook(String bookId) { // Implementation to return a book. System.out.printf("Member Return Book, BookId: %s\n", bookId); } public void SearchCatalog(String searchTerm) { // Implementation to search books. System.out.printf("Member Search Book, Search Catalog: %s\n", searchTerm); } } public class Librarian implements IBorrowReturn, ISearchable, IManageInventory { public void BorrowBook(String bookId) { // Implementation to borrow a book. System.out.printf("Librarian Borrow Book, BookId: %s\n", bookId); } public void ReturnBook(String bookId) { // Implementation to return a book. System.out.printf("Librarian Return Book, BookId: %s\n", bookId); } public void SearchCatalog(String searchTerm) { // Implementation to search books. System.out.printf("Librarian Search Book, Search Catalog: %s\n", searchTerm); } public void AddBook(Book book) { // Implementation to add a book. } public void RemoveBook(String bookId) { // Implementation to remove a book. } } public class Guest : ISearchable { public void SearchCatalog(string searchTerm) { // Implementation to search books. Console.WriteLine($"Guest Search Book, Search Catalog: {searchTerm}"); } } //Testing the Interface Segregation Principle public class Program { public static void Main() { Console.WriteLine("Librarian:"); Librarian librarian = new Librarian(); Book book = new Book() { BookId = "BK-10001", Title = "SOLID Principle using C#", Author = "Pranaya Rout", ISBN = "ISBN-Demo" }; librarian.AddBook(book); librarian.BorrowBook(book.BookId); librarian.SearchCatalog("SOLID"); librarian.ReturnBook(book.BookId); librarian.RemoveBook(book.BookId); Console.WriteLine("\nMember:"); Member member = new Member(); //member.AddBook(book); //Compile Time Error member.BorrowBook(book.BookId); member.SearchCatalog("SOLID"); member.ReturnBook(book.BookId); //member.RemoveBook(book.BookId); //Compile Time Error Console.WriteLine("\nMember:"); Guest guest = new Guest(); //guest.AddBook(book); //Compile Time Error //guest.BorrowBook(book.BookId); //Compile Time Error guest.SearchCatalog("SOLID"); //guest.ReturnBook(book.BookId); //Compile Time Error //guest.RemoveBook(book.BookId); //Compile Time Error Console.ReadKey(); } }
public interface IProduct { void SetPrice(BigDecimal price); void GetDescription(); byte[] Download(); // This does not apply to all products! void ShipTo(String address); // This does not apply to downloadable products! } public class Ebook implements IProduct { public void SetPrice(BigDecimal price) { // Implementation } public void GetDescription() { // Implementation } public byte[] Download() { byte[] ebook = new byte[1000]; // Return the e-book file return ebook; } public void ShipTo(String address) { throw new UnsupportedOperationException("Ebooks cannot be shipped!"); } }
public interface IProduct { void SetPrice(decimal price); void GetDescription(); } public interface IDownloadable { byte[] Download(); } public interface IShippable { void ShipTo(string address); } public class Ebook : IProduct, IDownloadable { public void SetPrice(decimal price) { // Implementation Console.WriteLine($"Price Set EBook: {price}"); } public void GetDescription() { // Implementation Console.WriteLine("Get Description : EBook"); } public byte[] Download() { Console.WriteLine("Download EBook"); // Return the e-book file return new byte[1000]; } } public class TShirt : IProduct, IShippable { public void SetPrice(decimal price) { // Implementation Console.WriteLine($"Price Set TShirt: {price}"); } public void GetDescription() { // Implementation Console.WriteLine("Get Description : TShirt"); } public void ShipTo(string address) { // Ship the t-shirt to the given address Console.WriteLine($"TShirt ShipTo : {address}"); } } //Testing the Interface Segregation Principle public class Program { public static void Main() { Ebook ebook = new Ebook(); ebook.SetPrice(1000); ebook.GetDescription(); ebook.Download(); TShirt shirt = new TShirt(); shirt.SetPrice(2000); shirt.GetDescription(); shirt.ShipTo("Address 1, City, Pindcode"); Console.ReadKey(); } }