您的位置:首页 > 编程语言 > Java开发

Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式

2015-06-18 18:33 351 查看
一、概述

1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式。例:小明装修屋子,把电视、冰箱都替换掉,他这次需要把电视、冰箱换成三星的,下次装修可能要换成海尔的。此时可设计抽象类Telveison及Fridge负责产生产品,抽象工厂AbstractFactory负责产生一系列产品

PS:抽象工厂与普通工厂各自的优缺点:

(1)普通工厂容易在产品维度进行扩展,但产生系列产品时不方便,且易造成工厂类泛滥

(2)抽象工厂增加新产品时,要修改AbstractFactory等多处地方

二、类结构

1.Televison.java

2.Fridge.java

3.SamsumgTelevison.java

4.SamsungFridge.java

5.HaierTevevison.java

6.HaierFridge.java

7.AbstractFactory.java

8.SamsungFactory.java

9.HaierFactory.java



三、代码

1.Televison.java

public abstract class Televison {

abstract void show();
}


  

2.Fridge.java

public abstract class Fridge {

abstract void cool();
}


  

3.SamsumgTelevison.java

public class SamsungTelevison extends Televison {

@Override
public void show(){
System.out.println("SamsungTelevison showing...........");
}
}


  

4.SamsungFridge.java

public class SamsungFridge extends Fridge {

@Override
void cool() {
System.out.println("SamsungFridge cooling");
}

}


  

5.HaierTevevison.java

public class HaierTelevison extends Televison {

@Override
void show() {
System.out.println("海尔电视 showinng...........");
}

}


  

6.HaierFridge.java

public class HaierFridge extends Fridge {

@Override
void cool() {
System.out.println("海尔冰箱冷却中............");
}

}


  

7.AbstractFactory.java

public abstract class AbstractFactory {
abstract Televison createTelevison();
abstract Fridge createFridge();
}


  

8.SamsungFactory.java

public class SamsungFactory extends AbstractFactory {

@Override
Televison createTelevison() {
return new SamsungTelevison();
}

@Override
Fridge createFridge() {
return new SamsungFridge();
}

}


  

9.HaierFactory.java

public class HaierFactory extends AbstractFactory {

@Override
Televison createTelevison() {
return new HaierTelevison();
}

@Override
Fridge createFridge() {
return new HaierFridge();
}

}


  

10.Test.java

public class Test {

@org.junit.Test
public void test(){
AbstractFactory factory = new SamsungFactory();
Televison tv = factory.createTelevison();
Fridge fridge = factory.createFridge();
tv.show();
fridge.cool();

System.out.println("=======================================");

factory = new HaierFactory();
tv = factory.createTelevison();
fridge = factory.createFridge();
tv.show();
fridge.cool();
}
}


  

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: