经过程序员大量使用,人们总结出了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("谈薪资录用...");
}
}