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();
}
}