设计模式-简单工厂 --工厂模式--抽象模式

 

1 、简单工厂模式

package com.bjsxt.factory.simplefactory;

public interface Car {
    void run();
}
复制代码
package com.bjsxt.factory.simplefactory;

public class Audi implements Car {

    @Override
    public void run() {
        System.out.println("奥迪再跑!");
    }

}
复制代码
复制代码
package com.bjsxt.factory.simplefactory;

public class Byd implements Car {

    @Override
    public void run() {
        System.out.println("比亚迪再跑!");
    }

}
复制代码
复制代码
package com.bjsxt.factory.simplefactory;

public class CarFactory {
    
    public static  Car createCar(String type){
        if("奥迪".equals(type)){
            return new Audi();
        }else if("比亚迪".equals(type)){
            return new Byd();
        }else{
            return null;
        }
    }
    
}
复制代码

调用者:如何没有使用工厂模式

复制代码
package com.bjsxt.factory.simplefactory;

/**
 * 测试在没有工厂模式的情况下
 * @author 尚学堂高淇 www.sxt.cn
 *
 */
public class Client01 {   //调用者
    
    public static void main(String[] args) {
        Car c1 = new Audi();
        Car c2 = new Byd();
        
        c1.run();
        c2.run();
        
    }
}
复制代码

如果使用简单工厂模式:

复制代码
package com.bjsxt.factory.simplefactory;

/**
 * 简单工厂情况下
 * @author 尚学堂高淇 www.sxt.cn
 *
 */
public class Client02 {   //调用者
    
    public static void main(String[] args) {
        Car c1 =CarFactory.createCar("奥迪");
        Car c2 = CarFactory.createCar("比亚迪");
        
        c1.run();
        c2.run();
        
    }
}
复制代码

简单工厂的缺点:

下面我们来看工厂模式:

我们首先定义了工厂抽象类的接口:

package com.bjsxt.factory.factorymethod;

public interface CarFactory {
    Car createCar();
}
复制代码
package com.bjsxt.factory.factorymethod;

public class AudiFactory implements CarFactory {

    @Override
    public Car createCar() {
        return new Audi();
    }

}
复制代码
复制代码
package com.bjsxt.factory.factorymethod;

public class BenzFactory implements CarFactory {

    @Override
    public Car createCar() {
        return new Benz();
    }

}
复制代码
复制代码
package com.bjsxt.factory.factorymethod;

public class BydFactory implements CarFactory {

    @Override
    public Car createCar() {
        return new Byd();
    }

}
复制代码
复制代码
package com.bjsxt.factory.factorymethod;


public class Client {
    public static void main(String[] args) {
        Car c1 = new AudiFactory().createCar();
        Car c2 = new BydFactory().createCar();
        
        c1.run();
        c2.run();
    }
}
复制代码

 

抽象工厂模式:

 

比如一个汽车的一个产品族:包括汽车发动机、汽车座椅 汽车 轮胎

package com.bjsxt.factory.abstractFactory;

public interface CarFactory {
    Engine createEngine();
    Seat createSeat();
    Tyre createTyre();
}

 

复制代码
package com.bjsxt.factory.abstractFactory;

public interface Engine {
    void run();
    void start();
}


class LuxuryEngine implements Engine{

    @Override
    public void run() {
        System.out.println("转的快!");
    }

    @Override
    public void start() {
        System.out.println("启动快!可以自动启停!");
    }
    
}

class LowEngine implements Engine{
    
    @Override
    public void run() {
        System.out.println("转的慢!");
    }
    
    @Override
    public void start() {
        System.out.println("启动慢!");
    }
    
}
复制代码
复制代码
package com.bjsxt.factory.abstractFactory;

public interface Seat {
    void massage();
}

class LuxurySeat implements Seat {

    @Override
    public void massage() {
        System.out.println("可以自动按摩!");
    }
    
}
class LowSeat implements Seat {

    @Override
    public void massage() {
        System.out.println("不能按摩!");
    }
    
}
复制代码
复制代码
package com.bjsxt.factory.abstractFactory;

public interface Tyre {
    void revolve();
}

class LuxuryTyre implements Tyre {

    @Override
    public void revolve() {
        System.out.println("旋转不磨损!");
    }
    
}

class LowTyre implements Tyre {

    @Override
    public void revolve() {
        System.out.println("旋转磨损快!");
    }
    
}
复制代码
复制代码
package com.bjsxt.factory.abstractFactory;

public class LowCarFactory implements CarFactory {

    @Override
    public Engine createEngine() {
        return new LowEngine();
    }

    @Override
    public Seat createSeat() {
        return new LowSeat();
    }

    @Override
    public Tyre createTyre() {
        return new LowTyre();
    }


}
复制代码
复制代码
package com.bjsxt.factory.abstractFactory;

public class LuxuryCarFactory implements CarFactory {

    @Override
    public Engine createEngine() {
        return new LuxuryEngine();
    }

    @Override
    public Seat createSeat() {
        return new LuxurySeat();
    }

    @Override
    public Tyre createTyre() {
        return new LuxuryTyre();
    }


}
复制代码
复制代码
package com.bjsxt.factory.abstractFactory;

public class Client {

    public static void main(String[] args) {
        CarFactory  factory = new LuxuryCarFactory();
        Engine e = factory.createEngine();
        e.run();
        e.start();
        
        
    }
}
复制代码

 

 一个高端的汽车由高端发动机、高端座椅、高端轮胎构成

posted on   luzhouxiaoshuai  阅读(141)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示