设计模式- 未完待续

设计模式:

策略模式:

分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设定行为对象。原则就是:分离变化部分,封装接口,基于编程各种功能。此模式让行为算法的变化独立于算法的使用者
**注意点**:
	1. 分析变化于不变化部分
	2. 多用组合少用继承;用行为类组合,而不是行为继承,使用组合行为,实现功能。

观察者模式:

对象之间多对一依赖的一种设计模式,被依赖的对象通知依赖对象。
**注意点**:
1. JAVA内置观察者模式
	i.   先进后出。
	ii.  内置两个函数: 1.通过规定参数传递。2.通过观察者获取数据解析
	iii. 不能多继承,无法实现定制
	iv.  通知前需要设置更改调用 setChanged();
2. 自定义观察者模式
	i.  可以实现先进先出
	ii. 可以实现定制

装饰者模式

	1. 就像一个快递,包含主体与包装物
	2. 动态的将新功能附加到对象上。在对象功能扩展方面比继承更富有弹性。
	3. 开放-关闭原则的设计。 
	4. java内置I/O设计就是装饰者模式

单例模式

	1. 确保一个类最多只有一个实例,并提供一个全局访问点
	2. 考虑多线程问题,防止同一时刻意外。确保唯一性与安全性。优化:
		i. Synchronized 方法上, 耗资源, 不频繁使用可以用
		ii. "急切" 创建实例,定义对象时直接创建,对于不使用此工厂时,占用内存
		iii. 双重检查加锁 , 创建时只会进行一次加锁

PS: 只是简单理解随便写写,未完待续。

在Java中,泛型是一种强类型机制,它可以让你在编译时检查类型错误,从而提高代码的安全性和可读性。在使用泛型时,我们经常会遇到父类和子类的泛型转换问题。 首先,我们需要明确一点:子类泛型不能转换成父类泛型。这是因为Java中的泛型是不协变的。例如,如果有一个类A和它的子类B,那么List<A>和List<B>之间是不存在继承关系的。 下面我们来看一个例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 } } ``` 在这个例子中,我们定义了Animal类和它的子类Dog。然后我们定义了两个List,分别是List<Animal>和List<Dog>。如果将List<Dog>赋值给List<Animal>,会出现编译错误。这是因为List<Animal>和List<Dog>之间不存在继承关系。 那么,如果我们想要让子类泛型转换成父类泛型,应该怎么办呢?这时我们可以使用通配符来解决问题。通配符可以表示任意类型,包括父类和子类。例如,我们可以将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 下面我们来看一个使用通配符的例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 List<? extends Animal> list3 = new ArrayList<>(); list3 = list2; // 正确 } } ``` 在这个例子中,我们定义了List<? extends Animal>来表示任意继承自Animal的类型。然后我们将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 总结一下,Java中的泛型是不协变的,子类泛型不能转换成父类泛型。如果需要实现子类泛型转换成父类泛型,可以使用通配符来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值