设计模式

设计模式

单例设计模式:
单例设计模式: 就是让某个类,只能有一个对象(任务管理器就是使用的单利设计模式)
/*
 * 饿汉单例设计模式--刚刚开始直接创建对象,当用户调用get方法了,直接返回已经创建好的对象即可!
 * */
public class Person {
    /*  实现步骤:
    *   a.私有化构造方法,目的是不让用户自己去创建对象
        b.在类的内部创建一个该类的对象,并且加上private static修饰
        c.提供一个静态的get方法,在方法中返回刚刚创建的那个对象
    *
    * */
    private Person() {
    }

    private static Person p = new Person();

    public static Person getInstance() {
        return p;
    }
}
/*
* 	懒汉式:

	刚刚开始我们不创建对象,当用户调用get方法了,再创建对象!
*
* */
public class Dog {
    private Dog() {
    }
    //定义一个对象,但不赋值
    private static Dog dog;
    private synchronized static Dog getDog() {
        //判断对象是否为空,为空就创建一个对象,不为空就直接将该对象返回
        if (dog == null) {
            dog = new Dog();
        }
        return dog;
    }
}
多例设计模式:
让某个类只能创建指定个数的对象.
/*  多例设计模式: 让某个类只能创建指定数量的对象
*   	实现步骤:
*               a.私有化构造方法,目的是不让用户随意创建对象
                b.在类的内部创建一个private static修饰的集合,用于保存我们指定个数的对象
                c.提供一个静态的get方法,该方法从集合中随机获取一个对象返回给用户即可!
* */
public class Cat {
    private Cat() {
    }
    //定义一个变量,用来指定创建的个数
    private static final int count = 3;
	//定义一个集合,用来储存对象
    private static ArrayList<Cat> list = new ArrayList<>();

    static {
        // 把创建的对象添加到集合,在静态代码块中执行这段代码,可以在对象调用的时候就执行,且只执行一次啊
        for (int i = 0; i < count; i++) {
            list.add(new Cat());
        }
    }
    // 提供一个方法,获取对象
    private static Cat getInstance() {
        //从集合中随机返回一个对象
        return list.get(new Random().nextInt(count));
    }
}

工厂模式设计模式
工厂模式是常见的设计模式之一,本来我们以前创建对象是直接自己new的方式创建的,有了工厂模式之后,我们把new的操作交给工厂,我们只需要调用工厂的方法获取对象即可!!!

优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

​ **缺点:**每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

// 定义一个接口.
public interface DriveMethod {
    void drive();
}
//定义2个类.实现接口
public class Car2 implements DriveMethod {
    @Override
    public void drive() {
        System.out.println("car2 开车了");
    }
}
public class Car1 implements DriveMethod {
    @Override
    public void drive() {
        System.out.println("car1 开车了");
    }
}

//定义一个工厂类,根据不同的参数返回不同的实现类对象
public class CarFactory {
    public static DriveMethod getCar(int i) {
        DriveMethod driveMethod = null;
        if (i == 1) {
            driveMethod = new Car1();
        } else if (i == 2) {
            driveMethod = new Car2();
        }
        return driveMethod;
    }

    //测试
    @Test
    public void method() {
        DriveMethod car = CarFactory.getCar(1);
        car.drive();
    }

    @Test
    public void method1() {
        DriveMethod car = CarFactory.getCar(2);
        car.drive();
    }
}


策略者模式
  • 执行者(谁执行策略)
  • 策略(策略接口)
    • 策略实现
  • 调用者
    • 创建策略传递给执行
每一个方法都是一种策略,在执行时才将策略的具体实现传递给方法
//定义一个接口,接口方法定义策略
public interface Sport {
    void sport();
}
//执行者的方法,传入策略,但是并没有告诉策略怎么执行
public class Person {
    public void play(Sport s) {
        s.sport();
    }
}
// 在具体执行策略是,执行者会将策略的方法具体并执行
class Text {
    public static void main(String[] args) {
        Person p = new Person();
        p.play(() -> {
            System.out.println("踢足球");
        });
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值