Множество раз поднимается тема шаблонов проектирования, множество книг, подкастов и статей, почему бы, я подумал, поучить более тщательно и параллельно выкладывать здесь то, что выходит.
Использую: Eclipse Indigo, JUnit 4
Singleton
Singleton - одиночка, смысл данного патерна в том, чтобы использовать единственный экземпляр какого-либо класса во всем приложении. Как одно из преимуществ, Singleton дает возможность доступа из любой точки кода приложения, через ИмяКласса.МетодВозвратаЭкземпляра. Опять таки, я бы советовал пересмотреть другие варианты и только потом переходить к Singleton, в общем не злоупотреблять! Вот так вот, перейдем к реализации:
package com.vlad.pattern.singleton;
public class Singleton {
private static final Singleton mInstance = new Singleton();
public static Singleton getInstance() {
return mInstance;
}
}
Так же было бы не плохо удостоверится, что я вас не обманываю, напишем рядом юнит тест:package com.vlad.pattern.singleton;
import static org.junit.Assert.*;
import org.junit.Test;
public class SingletonTest {
@Test
public void test() {
assertEquals(Singleton.getInstance(), Singleton.getInstance());
}
}
Abstract Super ClassТак вот неожиданно перейдем к смеси Interface и Abstract Super Class. Использовать данный шаблон стоит часто, из моего личного опыта. Суть в том, что часто приходится реализовывать, описывать однородные классы, яркий классический пример: Человек (Person), но человек может занимать разные должности и иметь разные профессии, но он остается человеком. Таким образом, чтобы не раскрывать и не привязываться конкретно к каждой реализации "человека", имеет смысл выдать в публичный доступ интерфейс, по которому внешний мир (приложение) смогло бы общаться с данными реализациями "человек"ов. Но нам этого мало, и не будем же мы заставлять каждую реализацию описывать, что мол это человек, с тремя ногами, ой, с двумя и руками, тоже с двумя. Чтобы избежать этого, создадим абстрактный класс, который имплементировал интерфейс и описывал основные признаки человека. Остальные реализации будут просто наследовать наш абстрактный класс. Вот как это дело может выглядить:
package com.vlad.pattern.abstractsupperclass;
public interface SomeInterface {
public void haveFun();
public boolean hadFun();
public void notHaveFun();
}
package com.vlad.pattern.abstractsupperclass;
abstract public class AbstractSuperClass implements SomeInterface {
private boolean hadFun = false;
public AbstractSuperClass(boolean withFun) {
hadFun = withFun;
}
@Override
public void haveFun() {
hadFun = true;
}
@Override
public boolean hadFun() {
return hadFun;
}
@Override
public void notHaveFun() {
hadFun = false;
}
}
package com.vlad.pattern.abstractsupperclass;
public class AlwaysHaveFun extends AbstractSuperClass {
public AlwaysHaveFun() {
super(true);
}
@Override
public void notHaveFun() {
}
}
package com.vlad.pattern.abstractsupperclass;
public class NoWayToHaveFun extends AbstractSuperClass {
public NoWayToHaveFun() {
super(false);
}
@Override
public void haveFun() {
}
}
Ну и куда мы без теста:package com.vlad.pattern.abstractsupperclass;
import static org.junit.Assert.*;
import org.junit.Test;
public class AbstractSuperClassTest {
@Test
public void test() {
SomeInterface doHaveFun = new AlwaysHaveFun();
SomeInterface doNotHaveFun = new NoWayToHaveFun();
doHaveFun.notHaveFun(); // no need fun
doNotHaveFun.haveFun(); // more fun
assertTrue(doHaveFun.hadFun());
assertFalse(doNotHaveFun.hadFun());
}
}
Вот так бегло рассмотрели парочку шаблонов проектирования, дальше больше.
Casino | 11 Ratings & Review by Mapyro
ReplyDeleteWelcome to Jamul Casino, one 성남 출장마사지 of the 인천광역 출장마사지 most fun and 여수 출장샵 exciting gambling sites in 광주광역 출장마사지 India. With a 구미 출장안마 strong focus on the Indian market, it's well-established