Decouple an abstraction from its implementation so that the two can vary independently.(將抽象和實現解耦,使得倆者可以獨立的變化)
public abstract class Product {
public abstract void beProducted();
public abstract void beSelled();
}
公司抽象
public abstract class Corp {
private Product product;
public Corp(Product _product){
this.product=_product;
}
public void makeMoney(){
this.product.beProducted();
this.product.beSelled();
}
}
房子也是產品不是嗎?
public class House extends Product {
@Override
public void beProducted() {
System.out.println("生產出的房子是這樣的...");
}
@Override
public void beSelled() {
System.out.println("生產出的房子賣出去了....");
}
}
public class IPod extends Product {
@Override
public void beProducted() {
System.out.println("生產出的ipod是這樣的");
}
@Override
public void beSelled() {
System.out.println("生產的IPod賣出去了");
}
}
public class HouseCorp extends Corp {
public HouseCorp(House _house) {
super(_house);
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("房地產公司賺大錢了");
}
}
public class ShanZhaiCorp extends Corp {
public ShanZhaiCorp(Product _product) {
super(_product);
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("我是山寨,我賺錢呀");
}
}
場景測試
public static void main(String[] args) {
System.out.println("房地產公司是這樣運行的");
House house=new House();
HouseCorp houseCorp=new HouseCorp(house);
houseCorp.makeMoney();
System.out.println();
System.out.println("山寨公司是這樣運行的");
ShanZhaiCorp shanZhaiCorp=new ShanZhaiCorp(new IPod());
shanZhaiCorp.makeMoney();
}
瞧瞧人家山寨公司,什麼東西流行就生產什麼,反正價格低,質量嘛也有那麼一點點保證。
我是菜鳥,我在路上。