工厂模式(更新中)

package ray;

//饿汉式单例:优点:线程安全,缺点:加载类的时候如果创建对象很费时,类的加载会很慢很慢…
// 1)封装构造器,封死new操作
// 2)声明私有的静态属性,指向本类对象的一个引用,并同时创建唯一对象,并让静态引用指向这个唯一对象
// 3)声明公共的静态方法,用以获取唯一对象

//懒汉式单例:优点:把对象的创建延迟了,提高了效率,缺点:因为有可能有线程安全问题
// 1)封装构造器
// 2)声明私有的静态属性,指向本类对象的一个引用,并不创建对象
// 3)声明公共的静态方法,用以获取唯一对象,在方法中如果是第一次调用才创建对象

class Singleton1{

private static Singleton1 only = new Singleton1();

public static Singleton1 getInstance() {
	return only;
}

private Singleton1() {
	
}

}

class Singleton2{
private static Singleton2 only = null;

public static Singleton2 getInstance() {
	if(only == null)//第一次调用此方法
		only = new Singleton2();
	return only;
}

}

public class SingletonTest {

 public static void main(String[] args) {
	 Singleton1 s1 = Singleton1.getInstance();
	 Singleton1 s2 = Singleton1.getInstance();
	 
	 System.out.println(s1 == s2);
 }

}
package ray;

//工厂方法
//定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。
//适用性:1当一个类不知道它所必须创建的对象的类的时候
// 2当一个类希望由它的子类来指定它所创建的对象的时候
// 3当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候

interface Worker{
void work();
}

class Teacher implements Worker{
public void work() {
System.out.println(“老师的工作就是上课”);
}
}

class Student implements Worker{
public void work() {
System.out.println(“学生的工作是学习”);
}
}

class ObjectFactory{//简化创建老师的过程
public static Teacher getTeacher() {
return new Teacher();
}
public Student getStudent() {
return new Student();
}
public Worker getTeacher1() {
return new Teacher();
}
}

public class FactoryTest {

public static void main(String[] args) {
	//静态与非静态方法调用
	ObjectFactory factory = new ObjectFactory();
	
	Teacher teacher = ObjectFactory.getTeacher();
	teacher.work();
	
	Worker worker1 = factory.getTeacher1();
	worker1.work();//用接口屏蔽子类细节
	
	
	Student student = factory.getStudent();
	student.work();
}

}

/*代理模式:

  • 场景一:用户无法直接接触到被代理对象
  • 场景二:方法功能要升级,但是不能改变被代理类
    */

interface HouseRent{
void rent();
}

class FangDong implements HouseRent{//被代理对象
@Override
public void rent() {
System.out.println(“我有房子要出租”);
}

}

class FangDong2 implements HouseRent{//被代理对象
@Override
public void rent() {
System.out.println(“我有房子要出租,漏水漏电”);
}

}

class LianJia implements HouseRent{

private HouseRent hr = new FangDong();//控制哪个房东
@Override
public void rent() {
	System.out.println("请交中介费20000");
	//使房东的房子真的出租
	hr.rent();
	System.out.println("及时交房租,交房租可以使用微信支付宝");//方法升级
}

}

public class EnumTest {

public static void main(String[] args) {
	//想租房子
	HouseRent hr = new LianJia();
	hr.rent();
	
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值