3种简单设计模式

博客介绍了三种简单的设计模式。单例模式分为饿汉式和懒汉式,前者类加载时创建对象,线程安全但效率低,后者首次获取时创建,线程不安全但效率高。简单工厂模式包含抽象和具体产品角色。静态代理有真实和代理角色,可减少与真实角色沟通,便于维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过程序员大量使用,人们总结出了23种设计模式,这里只是简单的介绍3种简单的设计模式。

单例模式

单例模式就是某个类只能创建一个对象,可分为饿汉式和懒汉式两种。
实现步骤:
  1.提供私有的静态的该类引用
  2.构造器私有化
  3.提供一个公共的静态访问方式
1.懒汉式
  在第一次获取的时候创建对象,线程不安全,相对效率高。
  可以手动控制线程安全,加一个同步锁synchronized。

public class Demo1{
	//提供一个静态的私有的该类的引用  用来存储未来创建的当前的实例
	private static Demo1 demo1;
	//构造器私有化
	private Demo1{
	}
	//公共的静态访问方式
	public static Demo1 getDemo1(){
		if(Demo1 == null){
			Demo1 demo1 = new Demo1();
		}
		return demo1;
	}
}

2.饿汉式
  在类加载的时候就创建对象,线程安全,相对效率低。

public class Demo2{
	//私有静态该类引用
	private static Demo2 demo2 = new Demo2();
	//构造器私有化
	private Demo2{
	}
	//公共静态访问方式
	public static Demo2 getDemo2(){
		return demo2;
	}
}

简单工厂模式

简单工厂模式含有两个角色:
  抽象产品角色:是具体产品角色继承或实现的父类或借口。
  具体产品角色。

public class FactoryDemo {
	public static void main(String[] args) {
		//接口多态
		Car car=factory("Me");
		car.run();
	}
	
	//工厂角色
	public static Car factory(String name){
		Car car=null;
		if("Ms".equals(name)){
			car=new Ms();
		}else{
			car=new Me();
		}
		
		return car;
	}
}
//抽象产品角色
interface Car{
	void run();
}
//具体产品角色
class Ms implements Car{
	@Override
	public void run() {
		System.out.println("一辆红色的玛莎拉蒂跑...");
	}
}
//具体产品角色
class Me implements Car{
	@Override
	public void run() {
		System.out.println("一辆奔驰在跑..");
	}
}

静态代理

代理模式可分为静态代理和动态代理,这里我们只讲一下静态代理。
静态代理可分为两个角色:
  真实角色:拿决定的
  代理角色:帮真实角色做事情的
1.真实角色和代理角色实现相同的接口|父类
2.代理角色必须持有真实觉得的引用
3.代理行为
在代理之前存在真实角色
优点:减少与真实角色的沟通,解耦,便于后期修改与维护。

public class StaticProxy {
	public static void main(String[] args) {
		Manager manager=new Manager("小明");
		Hr hr=new Hr("小红",manager);
		hr.addUser();
	}
}
//相同的接口  录用人
interface AddUser{
	void addUser();
}
//真实角色  项目经理
class Manager implements AddUser{
	String name;
	public Manager(String name) {
		this.name=name;
	}
	@Override
	public void addUser() {
		System.out.println("....录用了");
	}	
}
//代理角色  Hr
class Hr implements AddUser{
	String name;
	//持有真实觉得的引用
	Manager manager= null;
	public Hr(String name,Manager manager) {
		this.name=name;
		this.manager=manager;
	}	
	@Override
	public void addUser() {
		System.out.println("发布招聘信息..");
		manager.addUser();
		System.out.println("谈薪资录用...");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值