Java设计模式--- 创建型模式(Creational patterns)

1. 工厂模式(Factory)

通常情况下,利用static方法,我们使用静态工厂函数来获取对象。

interface Product{}
class A implements Product{}
class B implements Product{}

public class StaticFactory {
    public static Product getA(){  return new A(); }
    public static Product getB(){  return new B(); }
}
class myClient{
    public void get(String str){
        Product x = null ;
        if ( str.equals("A")) {
            x = StaticFactory.getA();
        }else if ( str.equals("B")){
            x = StaticFactory.getB();
        }
    }
}

这样客户端只需要传入相应的str就可以利用StaticFactory.getA()来获取一个Product对象了,不需要了解工厂里面的具体实现。

2. 抽象工厂模式(Abstract Factory)

抽象工厂比较灵活,当需要增加新的产品类的时候,只需要新增一个工厂类,就可以调用新类。而无需去改动原来的静态工厂里面的代码,使编程的可扩展性更强。如下实例所示:

interface Trace{}

class A implements Trace{}
class B implements Trace{}

interface Product{ Trace get();}

class FactoryA implements Product{
    @Override
    public Trace get() {
        return new A();
    }
}
class FactoryB implements Product{
    @Override
    public Trace get() {
        return new B();
    }
}

public class AbstractFactory {
    public void MyClient(){
        Trace x= new FactoryForA().get();
        Trace y = new FactoryForB().get();
    }
}

3. 建造者模式(Builder)

当客户端需要多个属性构成的一个整体对象的时候,用之前的Abstract Factory只能够得到一些零散的类对象,这就无法满足需求。所以这里使用Builder模式来应对这种情况。如下类图的关系:

例如如下的制造pizza的一个实例:

首先设计一个product类Pizza,如下:

/* "Product" */
class Pizza {
private String dough = "";
private String sauce = "";
private String topping = "";
public void setDough(String dough) {
this.dough = dough;
}
public void setSauce(String sauce) {
this.sauce = sauce;
}
public void setTopping(String topping) {
this.topping = topping;
}
}

然后设计一个Builder模式的抽象类,在里面设置需要不同对象实现的抽象方法:

abstract class PizzaBuilder {
protected Pizza pizza;
public Pizza getPizza() {
return pizza;
}
public void createNewPizzaProduct() {
pizza = new Pizza();
}
public abstract void buildDough();
public abstract void buildSauce();
public abstract void buildTopping();
}

然后用两个不同的实现方法的具体的类去继承它:

/* "ConcreteBuilder 1" */
class SpicyPizzaBuilder extends PizzaBuilder {
public void buildDough() {
pizza.setDough("pan baked");
}
public void buildSauce() {
pizza.setSauce("hot");
}
public void buildTopping() {
pizza.setTopping("pepperoni+salami");
}
}
/* "ConcreteBuilder 2" */
class HawaiianPizzaBuilder extends PizzaBuilder {
public void buildDough() {
pizza.setDough("cross");
}
public void buildSauce() {
pizza.setSauce("mild");
}
public void buildTopping() {
pizza.setTopping("ham+pineapple");
}
}

这样,两种不同的pizza制作方案类就出来了。当用户端waiter要运用它们使,接下来就要用到委派(delegation)关系了。

将这两种对象传进waiter类的构造函数里面,就可以在waiter类里面调用两种不同的pizza builder类的具体实现方法了。

waiter类如下:

class Waiter {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) {
pizzaBuilder = pb;
}
public Pizza getPizza() {
return pizzaBuilder.getPizza();
}
public void constructPizza() {
pizzaBuilder.createNewPizzaProduct();
pizzaBuilder.buildDough();
pizzaBuilder.buildSauce();
pizzaBuilder.buildTopping();
}
}

然后,我们的客户端可以利用如下来调用相关的类:

public class PizzaBuilderDemo {
public static void main(String[] args) {
Waiter waiter = new Waiter();
PizzaBuilder hawaiianPizzabuilder = new HawaiianPizzaBuilder();
PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder();
waiter.setPizzaBuilder( hawaiianPizzabuilder );
waiter.constructPizza();
Pizza pizza = waiter.getPizza();
}
}
这个里面创建一个waiter对象,然后我们用两种不同的Pizzabuilder方案来构造两个Pizzabuilder对象hawaiianPizzabuilder和spicyPizzaBuilder。然后,利用委派关系,将builder类作为参数传入到waiter类对象里面,waiter.setPizzaBuilder( hawaiianPizzabuilder );然后就可以运用waiter类里面的方法来对两个Pizzabuilder对象进行操作了。


Java设计模式是一组经过实践验证的面向对象设计原则和模式,可以帮助开发人员解决常见的软件设计问题。下面是常见的23种设计模式: 1. 创建型模式(Creational Patterns): - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 单例模式(Singleton Pattern) - 原模式(Prototype Pattern) - 建造者模式(Builder Pattern) 2. 结构模式(Structural Patterns): - 适配器模式(Adapter Pattern) - 桥接模式(Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式(Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为模式(Behavioral Patterns): - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 4. 并发模式(Concurrency Patterns): - 保护性暂停模式(Guarded Suspension Pattern) - 生产者-消费者模式(Producer-Consumer Pattern) - 读写锁模式(Read-Write Lock Pattern) - 信号量模式(Semaphore Pattern) - 线程池模式(Thread Pool Pattern) 这些设计模式可以根据问题的特点和需求来选择使用,它们提供了一些可复用的解决方案,有助于开发高质量、可维护且易于扩展的软件系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值