设计模式

设计模式(一)

1. 工厂模式

工厂模式是最简单的设计模式之一,核心思想是将实体类的生成逻辑封装,并使用同一个接口来指向创建的对象。
1、创建一个共同接口

public interface Animal {
    public void run();
}

2、创建实现该接口的实体类

public class Bird implements Animal{

    public void run() {
        // TODO Auto-generated method stub
        System.out.println("Bird -> flying");
    }

}
public class Dog implements Animal{

    public void run() {
        // TODO Auto-generated method stub
        System.out.println("dog -> running");
    }

}
public class Fish implements Animal{

    public void run() {
        // TODO Auto-generated method stub
        System.out.println("fish -> swimming");
    }

}

3、创建工厂类,该工厂类负责生成被该接口指向的实体类

public class Factory {

    public Animal create(String str) {
        if(str.equalsIgnoreCase("dog")){
            return new Dog();
        }
        if(str.equalsIgnoreCase("bird")){
            return new Bird();
        }
        if(str.equalsIgnoreCase("fish")){
            return new Fish();
        }
        return null;
    }
}

4、测试

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Factory factory = new Factory();
        Animal dog =  factory.create("dog");
        dog.run();
        Animal bird =  factory.create("bird");
        bird.run();
        Animal fish =  factory.create("fish");
        fish.run();
    }

}

5、结果(控制台输出)

dog -> running
Bird -> flying
fish -> swimming

总结:

工厂模式提供了一种隐藏生成逻辑的创建对象的方法。

2. 抽象工厂模式

抽象工厂模式是创建工厂的工厂,该设计模式同样隐藏了生成的逻辑。
1、创建接口

public interface Animal {
    public void run();
}
public interface Plant {
    public void quiet();
}

2、创建实现接口的实体类

public class Bird implements Animal{

    public void run() {
        // TODO Auto-generated method stub
        System.out.println("Bird -> flying");
    }

}
public class Dog implements Animal{

    public void run() {
        // TODO Auto-generated method stub
        System.out.println("dog -> running");
    }

}
public class Fish implements Animal{

    public void run() {
        // TODO Auto-generated method stub
        System.out.println("fish -> swimming");
    }

}
public class Flower implements Plant{

    public void quiet() {
        // TODO Auto-generated method stub
        System.out.println("flower -> beautiful");
    }

}
public class Tree implements Plant{

    public void quiet() {
        // TODO Auto-generated method stub
        System.out.println("tree -> high");
    }

}

3、创建抽象工厂类

public abstract class AbstractFactory {
    abstract Animal getAnimal(String str);
    abstract Plant getPlant(String str);
}

4、创建实体工厂

public class AnimalFactory extends AbstractFactory{

    Animal getAnimal(String str) {
        if(str.equalsIgnoreCase("bird")){
            return new Bird();
        }
        if(str.equalsIgnoreCase("dog")){
            return new Dog();
        }
        if(str.equalsIgnoreCase("fish")){
            return new Fish();
        }
        return null;
    }

    Plant getPlant(String str) {
        // TODO Auto-generated method stub
        return null;
    }

}
public class PlantFactory extends AbstractFactory{

    Animal getAnimal(String str) {
        // TODO Auto-generated method stub
        return null;
    }

    Plant getPlant(String str) {
        // TODO Auto-generated method stub
        if(str.equalsIgnoreCase("tree")){
            return new Tree();
        }
        if(str.equalsIgnoreCase("flower")){
            return new Flower();
        }
        return null;
    }

}

5、测试

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        AbstractFactory animalFactory=FactoryProducer.createFactory("animal");
        Animal dog = animalFactory.getAnimal("dog");
        dog.run();
        Animal bird = animalFactory.getAnimal("bird");
        bird.run();
        Animal fish = animalFactory.getAnimal("fish");
        fish.run();

        AbstractFactory plantFactory=FactoryProducer.createFactory("plant");
        Plant tree = plantFactory.getPlant("tree");
        tree.quiet();
        Plant flower = plantFactory.getPlant("flower");
        flower.quiet();
    }

}

6、结果

dog -> running
Bird -> flying
fish -> swimming
tree -> high
flower -> beautiful

总结:

抽象工厂类隐藏了创建逻辑,并且进行了实体类的分类。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值