总述
工厂设计模式
public class test {
public static void main(String[] args) {
Location position= new LocationFactory().getInstance("xiaomi");
position.getPosition();
position.getCityName(10, 20);
}
}
class LocationFactory{
public static Location getInstance(String type){
if("baidu".equals(type)){
return new BaiduLocation();
}else {
return new XiaoMiLocation();
}
}
}
class BaiduLocation implements Location{
@Override
public void getPosition() {
// TODO Auto-generated method stub
System.out.println("通过百度定位获取到当前的经纬度是XXXXX");
}
@Override
public void getCityName(long lat, long lng) {
// TODO Auto-generated method stub
System.out.println("通过百度定位获取到当前的城市是XXXXX");
}
}
class XiaoMiLocation implements Location{
@Override
public void getPosition() {
// TODO Auto-generated method stub
System.out.println("通过小米定位获取到当前的经纬度是XXXXX");
}
@Override
public void getCityName(long lat, long lng) {
// TODO Auto-generated method stub
System.out.println("通过小米定位获取到当前的城市是XXXXX");
}
}
/*接口的好处在于可以不通过上下级关系来分享一些共有的方法*/
interface Location{
public void getPosition();
public void getCityName(long lat,long lng);
}
观察者模式
通过实现接口,然后实现接口中的方法,被观察者通过notify来唤醒观察者
参照http://blog.csdn.net/sinat_28324227/article/details/49866147
代理模式
接口中的方法为代理者和被代理者都要做的方法
代码重构
//若一个方法的长度过长考虑分解,分解是注意提取带有返回值的方法来分解代码
1.好的代码从变量名就能看得出代码清晰
2.绝大多数情况下,函数应该放在它所使用的数据的所属对象A内,然后在另一个类中写一个得到A中数据的方法调用
3.想清楚代码要做的事,例如想计算不同的电影租赁价格不同,应该给Movie传类型,给Rental传租赁时长,而不应该给Movie传租赁时长
4.运用多态来代替switch中判断同属于一个对象,但是存在区别的语句跳转,不同的case下创建不同的对象