简单工厂模式和策略模式的区别

在了解了工厂模式和策略模式后,一直给人一种错觉,总感觉是一样的,没有丝毫的区别。可以看下两种模式的UML图。
在这里插入图片描述
从图上来看,好像并没有多大的区别。那么具体如何呢?下面通过代码来看看:
先定义接口

public interface People {
 
    public void eat();
 
    public void run();
 
    public void wear();
}

然后实现类

public class Xiaoming implements People{
 
    @Override
    public void eat() {
        System.out.println("小明吃饭");
    }
 
    @Override
    public void run() {
        System.out.println("小明跑步");
    }
 
    @Override
    public void wear() {
        System.out.println("小明穿衣");
    }
}
 
 
public class Xiaohong implements People{
 
    @Override
    public void eat() {
        System.out.println("小红吃饭");
    }
 
    @Override
    public void run() {
        System.out.println("小红跑步");
    }
 
    @Override
    public void wear() {
        System.out.println("小红穿衣");
    }
}

简单工厂模式的代码

public class PeopleFactory {
 
    public People getPeople(String name){
        if(name.equals("Xiaoming")){
            return new Xiaoming();
        }else if(name.equals("Xiaohong")){
            return new Xiaohong();
        }
        return null;
    }
}

策略模式的代码

public class StrategySign {
 
    private People people;
 
    public StrategySign(People people){
        this.people = people;
    }
 
    public StrategySign(String name){
        if(name.equals("Xiaoming")){
            this.people = new Xiaoming();
        }else if(name.equals("Xiaohong")){
            this.people = new Xiaohong();
        }
    }
 
    public void run(){
        people.run();
    }
}

策略模式的两种构造方法都可以用,这里列出两种为了让大家看到和工厂模式的区别和联系。

从工厂模式的代码中可以看到工厂模式主要是返回的接口实现类的实例化对象,最后返回的结果是接口实现类中的方法,而策略模式是在实例化策略模式的时候已经创建好了,我们可以再策略模式中随意的拼接重写方法,而工厂模式是不管方法的拼接这些的,他只关注最后的结果,不注重过程,而策略模式注重的是过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值