Java抽象工厂模式(附实例代码)每天一学设计模式

1.抽象工厂模式:提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。

(1)AbstractFactory(抽象工厂):它声明了一组用于创建一族产品的方法,每一个方法对应一种产品

(2)ConcreateFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。

(3)AbstractProduct(抽象产品):它为每种产品声明接口,在抽象产品中声明了产品所具有的的业务方法。

(4)ConcreteProduct(具体产品):它定义了具体工厂生产的具体产品对象,实现了抽象产品接口中声明的业务方法。

/**抽象工厂可以使接口也可以是具体类或者抽象类*/
public interface AbstractFactory{
    public AbstractProductA createProductA();//工厂方法一
    public AbstractProductB createProductB();//工厂方法二
    ···
}
/**具体工厂类*/
public class ConcreateFactory1 extends AbstractFactory{
    //工厂方法一
    public AbstractProductA createProductA(){
        return new ConcreteProductA1();
    }
    //工厂方法二
    public AbstractProductB createProductB(){
        return new ConcreteProductB1();
    }
    ```
}

2.代码实例描述:在做一个类似编辑器的软件,现编辑器有数字、字母、符号三种字符。可以根据需求给这三种字符切换成黑色或者红色。下面就是具体的代码实现。(添加新的字符和颜色更加方便)。

/**数字接口,充当抽象产品*/
public interface Digit {
    public void display();
}
/**黑色数字类,充当具体产品*/
public class BlackDigit implements Digit {
    public void display(){
        System.out.println("显示黑色数字");
    }
}
/**红色数字,充当具体产品*/
public class RedDigit implements Digit {
    public void display(){
        System.out.println("显示红色数字");
    }
}
/**字母抽象产品*/
public interface Letter {
    public void display();
}
/**黑色字母,充当具体产品*/
public class BlackLetter implements Letter {
    public void display(){
        System.out.println("显示黑色字母");
    }
}
/**Summer文本框类,充当具体产品*/
public class RedLetter implements Letter {
    public void display(){
        System.out.println("显示红色子母");
    }
}
/**符号接口,充当抽象产品*/
public interface Mark {
    public void display();
}
/**黑色符号类,充当具体产品*/
public class BlackMark implements Mark {
    public void display(){
        System.out.println("显示黑色符号");
    }
}
/**红色符号类,充当具体产品*/
public class RedMark implements Mark {
    public void display(){
        System.out.println("显示红色符号");
    }
}
/**字体颜色工厂接口,充当抽象工厂*/
public interface ColourFactory {
    public Digit createDigit();
    public Letter createLetter();
    public Mark createMark();
}
/**黑色工厂,充当具体工厂*/
public class BlackColourFactory implements ColourFactory {
    public Digit createDigit(){
        return new BlackDigit();
    }
    public Letter createLetter(){
        return new BlackLetter();
    }
    public Mark createMark(){
        return new BlackMark();
    }
}
/**红色工厂,充当具体工厂*/
public class RedColourFactory implements ColourFactory {
    public Digit createDigit(){
        return new RedDigit();
    }
    public Letter createLetter(){
        return new RedLetter();
    }
    public Mark createMark(){
        return new RedMark();
    }
}
/**客户端测试类*/
public class Client{
     public static void main(String args[]){
        //使用抽象层定义
        ColourFactory factory;
        Digit dt;
        Letter lt;
        Mark mk;
        //factory=(SkinFactory)XMLUtil.getBean();//为了开闭原则,可以利用反射机制和xml资源获取得到想使用的界面类
        factory = new RedColourFactory();//想更换颜色可以在这里做修改
        dt = factory.createDigit();
        lt = factory.createLetter();
        mk = factory.createMark();
        dt.display();
        lt.display();
        mk.display();
    }
}

运行结果显示 

 

3.简单工厂模式、工厂模式和抽象工厂模式的主要不同之处。

简单工厂模式的工厂要负责多种产品的创建;工厂模式的工厂会有子工厂,每个子工厂对应创建一个产品;抽象工厂模式的工厂也有子工厂,但是子工厂可以创建一类产品

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值