实现抽象工厂模式的技术要点如下:
· 抽象工厂模式和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是这三种模式中最为抽象、最具一般性的。
· 使用抽象工厂模式需要满足以下条件:系统中有多个产品族,而系统一次只可能消费其中一族产品;同属于同一个产品族的产品。
· 抽象工厂模式的组成部分与工厂方法模式的组成部分相同
package JAVA_Project_01_05;
/*
实现抽象工厂模式的技术要点如下:
· 抽象工厂模式和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是这三种模式中最为抽象、最具一般性的。
· 使用抽象工厂模式需要满足以下条件:系统中有多个产品族,而系统一次只可能消费其中一族产品;同属于同一个产品族的产品。
· 抽象工厂模式的组成部分与工厂方法模式的组成部分相同
*/
class Plant {//植物
String name;//植物名称
public Plant(String name) {//带参数的构造方法
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
abstract class Garden {//花园类
public abstract Plant getShade();//花台上的植物
public abstract Plant getCenter();//中间的植物
public abstract Plant getBorder();//边上的植物
}
class Elegant extends Garden {//典雅型
public Plant getBorder() {
return new Plant("兰草");
}
public Plant getCenter() {
return new Plant("榕树");
}
public Plant getShade() {
return new Plant("郁金香");
}
}
class Practical extends Garden//实用型
{
public Plant getShade() {
return new Plant("葡萄");
}
public Plant getCenter() {
return new Plant("石榴");
}
public Plant getBorder() {
return new Plant("丝瓜");
}
}
class Lazy extends Garden//懒人型
{
public Plant getShade() {
return new Plant("月季");
}
public Plant getCenter() {
return new Plant("茶花");
}
public Plant getBorder() {
return new Plant("竹");
}
}
class GardenMaker {//抽象工厂类
private static Garden garden;
public static Garden getGarden(String type) {
garden = new Elegant();//默认情况
if (type.equals("实用型"))
garden = new Practical();
if (type.equals("懒人型"))
garden = new Lazy();
return garden;
}
}
public class TextAbstractFactory {//操作抽象工厂模式的类
public static void main(String[] args) {//Java程序主入口处
Garden garden = GardenMaker.getGarden("实用型");//传入参数调用方法获得实例
Plant shade = garden.getShade();//获取花园植物
Plant center = garden.getCenter();
Plant border = garden.getBorder();
System.out.println("花台上的植物:" + shade.getName());
System.out.println("中间的植物:" + center.getName());
System.out.println("边上的植物:" + border.getName());
}
}
/*
(1)程序中定义一个植物类、一个花园的抽象类、三个不同花园的抽象类的实现类以及一个抽象工厂类。程序中使用抽象工厂类实现对不同花园的选择。
使用这样模式能够将实现类和它们的生成过程完全分割开来。实现类被隐藏在工厂类中,调用者不必知道实现类的任何信息。
(2)虽然抽象工厂中的子类继承了同一个超类,但是它们也可以拥有与其他子类不同的方法。
*/
我不是猫叔
发布了70 篇原创文章 · 获赞 10 · 访问量 3168
私信
关注